package com.liusaidh.service;

import com.liusaidh.domain.*;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpSession;
import java.util.List;

@Transactional//事务回滚
public interface UserService {


    /**
     * 发送邮箱的验证码
     *
     * @param email
     * @return
     */
    String getEmailRegister(String email);

    /**
     * 查询所有的用户
     * @param pageNo 页码数
     * @param pageSize 每页的数量
     * @param condition  条件
     * @return 返回用户信息
     */
    PageBean getAllUser(Integer pageNo, Integer pageSize, String condition);

    /**
     * 根据用户id删除用户
     *
     * @param id
     * @return
     */
    User getUserById(Integer id);

    int updateUser(User user);

    long getTotalCount(String condition);

    int banUserToComment(Integer id);

    int notBanUserToComment(Integer id);

    void concernUser(Integer id, Integer id1);

    void notConcernUser(Integer id, Integer id1);

    /**
     * 获取用户
     * @param condition 查询的条件
     * @return  返回用户的聚合
     */
    List<User> getUserByLike(String condition);


    /**
     * 判断该用户是否关注其他的用户
     *
     * @param id  该用户的id
     * @param id1 其他用户的id
     * @return true:代表是 false:代表不是
     */
    boolean judgeUserOfConnection(Integer id, Integer id1);




    /**
     * 用于获取当别人评论我的文章或一级评论时，给我发信息
     * @param id 我的id
     * @return 返回list集合
     */
    List<Comment> getOthersCommentOfMe(Integer id,Integer pageNo,Integer pageSize);

    /**
     * 用于获取当别人对我的文章点赞时的显示
     *
     * @param id 我的id
     * @return 返回list集合
     */
    List<Like> getOthersLikeOfMe(Integer id,Integer pageNo,Integer pageSize);



    /**
     * 添加用户
     *
     * @param user 用户对象
     * @return 返回受影响的行数
     */
    int addUser(User user);


    /**
     * 根据id删除用户
     *
     * @param id 用户的id
     * @return 返回受影响的行数
     */
    int deleteUserById(Integer id);


    User getUserInfoByEmail(String email);


    ModelAndView register(String code, String email, String password, HttpSession session);

    ModelAndView login(String email, String password, HttpSession session);
}
